import {
  fileURLToPath,
  URL,
} from 'node:url';

import UnoCSS from 'unocss/vite';
import AutoImport from 'unplugin-auto-import/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
import Components from 'unplugin-vue-components/vite';
import { defineConfig } from 'vite';

import vue from '@vitejs/plugin-vue';

// https://vite.dev/config/
export default defineConfig({
  base:'admin',
  plugins: [
    vue(),
    UnoCSS(),
    AutoImport({
      imports: ["vue", "vue-router"],
      dts: true,
    }),

    Components({
      resolvers: [ElementPlusResolver()],
      dts: true,
    }),
  ],
  server: {
    port: 8080,
    proxy: {
      "/api": {
        target: "http://localhost:3000/",
        changeOrigin: true,
      },
    },
  },
  optimizeDeps: {
    // 预构建依赖以减少运行时文件打开
    include: ['vue', 'vue-router', 'element-plus', 'axios']
  },
  build: {
    // 优化构建配置以减少文件句柄使用
    rollupOptions: {
      output: {
        // 手动分块以减少单次打开的文件数量
        manualChunks(id) {
          if (id.includes('node_modules')) {
            if (id.includes('element-plus')) {
              return 'element-plus';
            }
            if (id.includes('vue') || id.includes('@vue')) {
              return 'vue-vendor';
            }
            return 'vendor';
          }
        }
      },
      // 减少并发处理数
      maxParallelFileOps: 5
    },
    // 减少并发构建数量
    target: 'es2015',
    // 启用源码映射但使用较少资源的格式
    sourcemap: false,
    // 减少内存使用
    chunkSizeWarningLimit: 1000,
    // 减少文件监听
    watch: null,
  },
  resolve: {
    alias: {
      // 修复问题：new URL 需要传入第二个参数作为 base URL，这里使用 import.meta.url 作为基础路径
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
});
